package com.jf.filter;

/**
 * Created with IntelliJ IDEA
 * Description:
 * User:22954
 * Date:2024-09-03
 * Time:18:03
 */
public class Filter_ {
    /*
    Filter是JavaWeb的三大组件之一
    Filter是JavaEE的规范,是接口
    Filter的作用为: 拦截请求 | 过滤响应
    Filter运行流程:
        1.Tomcat检测客户端请求资源路径与Filter的urlPatterns匹配
        2.Tomcat调用Filter的doFilter,传入ServletRequest/ServletResponse/FilterChain
            Filter根据业务,进行过滤,
                符合过滤条件的写filterChain.doFilter(servletRequest, servletResponse)进行继续请求
                不符合的自行写流程返回或拒绝
    Filter的配置规则
        web.xml配置
            <filter>
                <filter-name>Name</filter-name>
                <filter-class>类完整路径</filter-class>
            </filter>
            <filter-mapping>
                <filter-name>Name</filter-name>
                <url-pattern>需过滤的url</url-pattern> | <servlet-name>需过滤的servlet的name<servlet-name>
            </filter-mapping>
    Filter的urlPatterns规则
        第一个'/'在服务器解析为ip:port/工程路径/
        *表示任意匹配
        *.suffix表示后缀为suffix的都匹配上
        resource.*表示前缀为resource的都匹配上
    职责链模式/过滤器链
        Filter可以设置多个
        多个Filter匹配同一个请求路径
        纯web.xml配置Filter
            根据Filter在web.xml配置循序,先匹配urlPatterns,再匹配servlet-name
        纯注解配置Filter
            根据Filter的类名按字典序升序排序,先匹配urlPatterns,再匹配servlet-name
        web.xml + 注解配置
            先匹配urlPatterns 先web.xml再注解
            再匹配servlet-name 先web.xml再注解
    Filter的生命周期
        所有Filter由Tomcat维护在一个数据结构(疑似LinkedHashMap)
        在Tomcat启动时按倒序创建Filter实例,同时创建FilterConfig实例对象,调用Filter的init()并传入filterConfig
        所有Filter只有一个实例
        在Tomcat关闭时按倒序调用Filter的destroy()
     */
}
